Windows “七大奇迹”:DNS Dynamic Updates 中的7个严重漏洞
编译:奇安信代码卫士团队
微软在3月补丁星期二修复了7个 DNS 漏洞,其中5个是远程代码执行 (RCE) 漏洞(CVE-2021-26877、CVE-2021-26897、CVE-2021-26893、CVE-2021-26894和CVE-2021-26895),CVSS 评分为9.8;余下的2个是拒绝服务 (DoS) 漏洞(CVE-2021-26896 和 CVE-2021-27063)。微软与 MAPP 会员共享了其中2个 RCE 漏洞的检测指南和 PoC(CVE-2021-26877 和 CVE-2021-26897)。McAfee 已经在 DNS Dynamic Zone Update 中证实了它们的存在。之后微软证实称所有的7个漏洞都位于 Dynamic Zone Update 活动中。McAfee 从对 CVE-2021-26877 和 CVE-2021-26897 的分析以及微软的进一步说明中证实,这5个 DNS RCE 漏洞均非可蠕虫漏洞。
CVSS 评分为9.8 意味着攻击者能够攻陷 DNS 服务器而无需认证或用户交互。如这些漏洞遭利用将导致 Primary Autoritative DNS 服务器上 RCE 执行的后果。不过虽然 CVSS 评分是一款不错的技术评分工具,但需要结合用户 DNS 部署环境的上下文才能理解下文所讨论的风险。
强烈建议 Dynamic Updates 用户尽快修复 Windows DNS 服务器。如无法修复,则建议优先评估暴露情况。
DNS Dynamic Updates,威胁和部署
美国国家标准与技术研究员 (NIST) 在《DNS 安全部署指南》中提到,DNS 威胁可分为平台和事务威胁。平台威胁可归类为 DNS 主机平台或 DNS 软件威胁。如下表,Dynamics Update 是 DNS 四大事务类型之一。这7个DNS 漏洞存在于 Windows DNS Software 的 Dynamic Update DNS 事务功能内。
DNS Dynamic Zone Update 功能可使客户端在 Primary DNS Authoritative Server 上更新 Resource Records (RRs),如何时更改 IP 地址;这些客户端一般是证书颁发机构和 DHCP 服务器。Dynamic Zone Update 共鞥可在标准的 DNS 服务器或集成活动目录 (AD) 的DNS 服务器上部署。最佳实践是部署集成 AD 的 DNS,以便供微软安全如 Kerberos 和 GSS-TSIG 使用。
在 DNS 服务器上创建 Zone 时有一个选项即可以启用或禁用 DNS Dynamic Zone Updates。当 DNS 部署为单独的服务器时,Dynamic Zone Update 功能默认禁用但可在安全/不安全的模式下启用。当 DNS 部署为集成 AD 时,Dynamic Zone Update 功能在默认情况下以安全模式启用。
安全的Dynamic Zone Update验证所有的 RR 更新均通过加入域的计算机上的 GSS-TSIG 进行了数字签名。此外,可以对哪些主体能够执行 Dynamic Zone Updates 应用更精细的控件。
不安全的 Dynamic Zone Update 可使任何机器在无需认证的情况下更新 RRs(不推荐)。
攻击的前提
集成 AD 的 DNS Dynamic Updates(安全更新的默认配置)
DNS 服务器必须接收对至少一个 Zone 的写请求(一般一个DNS主服务器仅允许 Zone RR 写,单配置不当和辅助服务器可忽视该要求)
域加入机器
攻击者必须构造 DNS 服务器请求并在请求中提供目标 Zone
单独的 DNS 服务器(安全/不安全配置)
DNS 服务器必须接收对至少一个 Zone 的写请求(一般一个DNS主服务器仅允许 Zone RR 写,单配置不当和辅助服务器可忽视该要求)
攻击者必须构造 DNS 服务器请求并在请求中提供目标 Zone
从威胁模型的角度来看,我们必须考虑威胁行动者的动机、能力和访问/机会,因此我们必须理解和环境相关的风险。我们并未在野外发现这些漏洞遭利用的急响,因此必须专注于访问能力,即关上了威胁行动者的机会。表2概述了和这些 RCE 漏洞所展现机会相关的 DNS Dynamic Update 部署模型。
风险最高的部署是暴露到互联网的 Dynamic Update 不安全模型中的 DNS 服务器;这并非最佳安全实践,而且以我们的经验来看,并不了解这类部署的用例。
在安全模式(默认)下部署集成 AD 的 DNS Dynamic Update 虽然缓解了未认证攻击者的风险,单仍然具有失陷域名计算机或受信任内部人员实现 RCE 的高风险。
漏洞分析
所有的漏洞都和在 dns.exe 中处理 Dynamic Update 数据包相关。我们分析漏洞的目的是确保能够生成保护客户的签名。
CVE-2021-26877 分析
当 Zone 更新时,TXT RR 的 “TXT 长度“大于”Data长度“,该漏洞触发,如Wireshark 所示:
该漏洞位于 File_PlaceStringInFileBuffer() 函数中,可从 WinDbg 输出看出:
当DNS Dynamic Zone Update 的 “TXT 长度“字段未得到相对于“Data 长度”的验证时,该漏洞即堆上的界外读取漏洞。它可使攻击者读取多达255字节的内存。微软指出该漏洞可用于实现 RCE;不过需要进一步的界外写源语。
和该界外读取相关的内存分配在 CopyWireRead() 函数中创建。该函数的相关伪代码如下:
File_PlaceStringInFileBuffer() 函数此前从CopyWireRead() 函数分配的 TXT_data 中复制数据。然而,Wireshark 显示的UpdateRR->TXT 长度值并未验证且用于从 *UpdateRR->Data 长度复制。由于 UpdateRR->TXT 长度 并未相对于 UpdateRR->Data 长度进行验证,因此会导致堆内存界外读取漏洞。
CVE-2021-26897 分析
当发送很多连续的 Signature RRs Dynamic Update 时就会触发该漏洞
在写入 Zone 文件前,将很多连续的 Signature RR Dynamic Updates 组合至 base64 编码的字符串中时就会在堆上发生界外写漏洞。
微软认为该漏洞可用于实现 RCE。
利用
远程利用这些漏洞,除了绕过 Control Flow Guard (CFG) 外还要求读写原语。DNS 协议拥有庞大的远程未认证攻击面,有利于生成此类原语。此外,从RR_DispatchFuncForType() 函数来看,其调用表中存在读写函数。
缓解措施
打补丁是首选也是最有效的措施。如无法打补丁,则最佳缓解措施是审计DNS部署配置,将 Dynamic Zone Updates 仅限于受信任服务武器。
另外,NIST在《DNS部署安全指南》中也提供了保护 DNS 部署的最佳实践:
1、DNS 主服务器应当限制能够更新 RRs 的客户端
2、使用 GSS-TSIG 确保 Dynamic Update 的安全
3、 DNS 辅助服务器 Dynamic Update 使用 GSS-TSIG转发限制
4、使用 GSS-TSIG实现细粒度的 Dynamic Update 限制
开源的 DNS 转发软件 Dnsmasq 被曝7个漏洞,可劫持数百万台设备
12年前的 Linux bug 复活,DNS 缓存投毒攻击重现
微软补丁星期二:修复多个严重 RCE 和IE 0day
https://www.mcafee.com/blogs/other-blogs/mcafee-labs/seven-windows-wonders-critical-vulnerabilities-in-dns-dynamic-updates/
题图:Pixabay License
本文由奇安信代码卫士编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。
奇安信代码卫士 (codesafe)
国内首个专注于软件开发安全的
产品线。